使用 Helm 与 Kustomize 实践声明式管理
Kubernetes 于 2014 年夏季登陆 GitHub ,2015 年夏季推出 Kubernetes 的第一个 1.0 版本,其发展速度和进步在许多人的脑海中仍然记忆犹新。
像任何应用基础设施一样,workloads 的操作开始在 Kubernetes 上变得越来越重要。所以 Kubernetes 提出了 resources 的概念,通常由基于 YAML 的 manifests 来描述各种各样的 workloads,如 deployment.yaml。
随着需要部署的 manifests 数量和需要维护的 Kubernetes 集群数量的双重增加,我们需要更高效的 manifests 管理方式,以便在 cluster-to-cluster 之间获得更容易的部署,和更灵活的配置。
本文将介绍如何使用 Heml 和 Kustomize 来对 Kubernetes 生态系统内的对象进行声明式配置和包管理。
什么是 Helm ?
Helm 是 Kubernetes 的应用程序包管理器,您可使用 Helm Charts 描述应用程序的结构,使用 Helm 命令行界面,您可以回滚部署、监控应用程序的状态并跟踪每项部署的历史记录。
Helm 最初由Deis于 2015 年开发,并在首届 Kubecon 上展出。2019 年 4 月,CNCF 宣布 Helm 的孵化期结束,成为一个完整的项目。
Tiller是 Helm v2 平台的一部分。它来自与 Google 的 Deployment Manager 项目集成的部分,旨在成为一个工作运行器,与Cloud Foundry 的 Bosh没有太大区别。简 而言之,Tiller 是 Helm 的集群内部分,它运行 Helm 的命令和图表。由于 Tiller 可以不受限制地访问 Kubernetes 集群成为集群安全的痛点,因此在 Helm V3 中将其删除了。
基本概念
- Chart:Helm 使用的包格式称为 chart。 chart 就是一个描述Kubernetes相关资源的文件集合。
- Release:在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。
- Repository:用于发布和存储 Chart 的存储库。
Helm Charts
- Helm 图表在创建时必须具有遵循语义版本控制的版本号。
- Helm Charts 可以引用其他 Charts 作为依赖项,这是任何包管理器的核心。
- Helm Charts 的更多高级功能如Chart Hooks和Chart Tests,它们允许与 Release 的生命周期进行交互,以及分别针对 Chart 运行命令/测试的能力。
运行 helm create eg-Helm
创建一个 Helm Charts
可以看到 Chart 的基本目录结构包括:
eg-Helm/ # chart 包目录名
├── charts # 包含 chart 依赖的其他 chart
├── Chart.yaml # 包含了chart信息的YAML文件,如chart的名字,版本号信息。
├── crds # 自定义资源的定义
├── templates # 模板目录,和 values 结合时,可生成有效的 Kubernetes manifest
│ ├── deployment.yaml
│ ├── _helpers.tpl # helm视为公共库定义文件,主要用于定义通用的子模 版、函数等
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt # 帮助信息文件,helm install 安装成功后会输出帮助信息
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml # chart 默认的配置值,模版可以引用这里参数。